package com.xbongbong.paas.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * 星级
 * Description:
 *
 * @author 李杰
 * @version v1.0
 * @date 2019/5/5 21:21
 * @since v1.0
 */
@Getter
public enum StarEnum {
    // 星级
    ZERO(0, "enum.star.text.zero"),
    ONE(1, "enum.star.text.one"),
    TWO(2, "enum.star.text.two"),
    THREE(3, "enum.star.text.three"),
    FOUR(4, "enum.star.text.four"),
    FIVE(5, "enum.star.text.five"),
    UNKNOW(404, "enum.star.text.unknow"),;


    private int value;

    private String text;

    StarEnum(int value, String text) {
        this.value = value;
        this.text = text;
    }

    public static StarEnum getStarByValue(Integer value) {
        if (value == null) {
            return UNKNOW;
        }
        for (StarEnum starEnum : StarEnum.values()) {
            if (Objects.equals(starEnum.getValue(), value)) {
                return starEnum;
            }
        }
        return UNKNOW;
    }

    /**
     * 由枚举值获取中文名
     *
     * @param value 枚举值
     * @return java.lang.String
     * @author 徐俊杰
     * @date 2019/4/22 10:12
     * @since v1.0
     */
    public static String getTextByValue(Integer value) {
        //没有匹配的，则置为未评价（0星）
        return getTextByValue(value, null);
    }

    /**
     * 通过枚举value，获取其text
     * @param value 枚举值
     * @param defaultText 当获取不到时，默认展示值（如果传null，则会展示“未评价”）
     * @return java.lang.String
     * @author zcp
     * @date 2019/7/3 17:30
     * @since v1.0
     * @version v1.0
     */
    public static String getTextByValue(Integer value, String defaultText) {
        if (value == 0) {
            //没有匹配的，则置为未评价（0星）
            if (Objects.equals(defaultText, null)) {
                return ZERO.getText();
            } else {
                return defaultText;
            }
        }
        for (StarEnum cacheCode : values()) {
            if (Objects.equals(cacheCode.value, value)) {
                return cacheCode.getText();
            }
        }
        //没有匹配的，则置为未评价（0星）
        if (Objects.equals(defaultText, null)) {
            return ZERO.getText();
        } else {
            return defaultText;
        }
    }

    /**
     * 获取导出导入需要的星级枚举集合
     *
     * @return 星级枚举集合
     */
    public static List<StarEnum> getStarsByImport() {
        List<StarEnum> importStars = new ArrayList<>();
        importStars.add(ZERO);
        importStars.add(ONE);
        importStars.add(TWO);
        importStars.add(THREE);
        importStars.add(FOUR);
        importStars.add(FIVE);
        return importStars;
    }

    /**
     * 获取筛选需要的星级枚举集合
     *
     * @return 星级枚举集合
     */
    public static List<StarEnum> getStarsForScreen() {
        List<StarEnum> screenStars = new ArrayList<>();
        screenStars.add(ONE);
        screenStars.add(TWO);
        screenStars.add(THREE);
        screenStars.add(FOUR);
        screenStars.add(FIVE);
        return screenStars;
    }

    public String getText() {
        return I18nMessageUtil.getMessage(text);
    }
}
